// 引入axios的核心库以及一些规则定义方法
import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios'
//引入自定义的数据接口
import {ResultData} from './interface'
//封装配置方法
let config = {
    //基础地址
    baseURL: '/api'
}

//封装一个请求类 这个类中包含了拦截器，包含了 get/post方法
class HttpRequest {
    //创建一个http的属性 代表的就是axios
    http: AxiosInstance
    constructor(config: AxiosRequestConfig) {
        //重新实例化了一个axios
        this.http = axios.create(config)
        //请求拦截器
        this.http.interceptors.request.use(req=>{
            //req 代表的就是请求参数
            //进行token的验证
            return req
        })
        //响应拦截器
        this.http.interceptors.response.use(res=>{
            //全局拦截错误以及数据响应
            return res.data
        })
    }
    /* 
        封装get方法
        url
        params
    */
   get<T>(url:string,params?:object):Promise<ResultData<T>>{
       return this.http.get(url,{params})
   }
   /* 
    封装post 方法
   */
  post<T>(url:string,params?:object):Promise<ResultData<T>>{
      return this.http.post(url,params)
  }
}

//导出封装好的类
export default new HttpRequest(config)

